package br.com.requisicao.compra.Bean;

import java.security.Principal;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;

import br.com.requisicao.compra.canonico.UnidadeMedida;
import br.com.requisicao.compra.constantes.ConstantesMensagensErros;
import br.com.requisicao.compra.constantes.ConstantesMensagensSucesso;
import br.com.requisicao.compra.service.IUnidadeMedidaService;
import br.com.requisicao.compra.service.impl.UnidadeMedidaService;

@ManagedBean(name = "cadastroUnidadeMedidaBean")
@SessionScoped
public class CadastroUnidadeMedidaBean {

	private IUnidadeMedidaService unidadeMedidaService;
	private UnidadeMedida unidadeMedida;

	public String inicializar() {

		FacesContext context = FacesContext.getCurrentInstance();

		try {

			this.unidadeMedida = new UnidadeMedida();

			return "cadastroUnidadeMedida";

		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage(
					ConstantesMensagensErros.ERRO_INESPERADO_INICIAR_VALORES);
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}
		return "cadastroUnidadeMedida";
	}

	public void salvar(ActionEvent event) {

		this.unidadeMedidaService = new UnidadeMedidaService();

		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) context
				.getExternalContext().getRequest();
		Principal usuario = request.getUserPrincipal();

		try {

			this.unidadeMedida.setSolicitante(usuario.getName());
			this.unidadeMedida.setDataCriacao(new Date());

			unidadeMedidaService.salvar(this.unidadeMedida);

			this.unidadeMedida = new UnidadeMedida();
			FacesMessage msg = new FacesMessage(
					ConstantesMensagensSucesso.UNIDADE_MEDIDA_SALVA_SUCESSO);
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage(
					ConstantesMensagensErros.ERRO_INESPERADO_SALVAR_UNIDADE_MEDIDA);
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}
	}

	/**
	 * @return the unidadeMedida
	 */
	public UnidadeMedida getUnidadeMedida() {
		return unidadeMedida;
	}

	/**
	 * @param unidadeMedida
	 *            the unidadeMedida to set
	 */
	public void setUnidadeMedida(UnidadeMedida unidadeMedida) {
		this.unidadeMedida = unidadeMedida;
	}

	/**
	 * @return the unidadeMedidaService
	 */
	public IUnidadeMedidaService getUnidadeMedidaService() {
		return unidadeMedidaService;
	}

	/**
	 * @param unidadeMedidaService
	 *            the unidadeMedidaService to set
	 */
	public void setUnidadeMedidaService(
			IUnidadeMedidaService unidadeMedidaService) {
		this.unidadeMedidaService = unidadeMedidaService;
	}

}